import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'dart:convert';
import 'common/index.dart';
import 'pages/index.dart';

class Global {
  /// 全局初始化方法
  /// 在应用启动时调用，执行所有必要的初始化操作
  static Future<void> init() async {
    // 确保Flutter引擎绑定初始化
    WidgetsFlutterBinding.ensureInitialized();

    // 初始化本地存储工具类
    await Storage().init();

    // 初始化服务
    Get.put(UserService());
    Get.put(CommonService());
    Get.put(PostService());
    Get.put(PlantService());
    Get.put(ChatService());

    // 初始化所有默认数据
    await _initAllDefaultData();

    // 初始化控制器
    Get.put(HomeController());
    Get.put(CommunityController());
    Get.put(PostDetailController());
    Get.put(AiController());
    Get.put(MyPlantController());
    Get.put(MainController());
  }

  /// 初始化所有默认数据到缓存
  static Future<void> _initAllDefaultData() async {
    // 1. 初始化用户数据
    await _init_user_data();

    // 2. 初始化植物数据
    await _init_plant_data();

    // 3. 初始化评论数据
    await _init_comment_data();

    // 4. 初始化帖子数据
    await _init_post_data();
  }

  /// 初始化用户数据
  static Future<void> _init_user_data() async {
    final isInit = Storage().get_bool(Constants.is_init_user_data);
    if (isInit) return;

    // 设置标志位，避免重复初始化
    Storage().set_bool(Constants.is_init_user_data, true);

    // 获取用户名列表
    final list = Storage().get_list(Constants.username_list);

    // 存储所有默认用户数据
    for (var user in user_data.values) {
      if (!list.contains(user.name)) {
        list.add(user.name!);
        Storage().set_json('user_${user.name}', user.toJson());
      }
    }

    // 更新用户名列表
    Storage().set_list(Constants.username_list, list);
  }

  /// 初始化植物数据
  static Future<void> _init_plant_data() async {
    final isLoaded = Storage().get_bool(Constants.is_loading_plant);
    if (isLoaded) return;

    // 设置标志位，避免重复初始化
    Storage().set_bool(Constants.is_loading_plant, true);

    // 存储所有默认植物数据
    for (var plant in default_plants) {
      Storage().set_json('plant_${plant.id}', plant.toJson());
    }
  }

  /// 初始化评论数据
  static Future<void> _init_comment_data() async {
    final isLoaded = Storage().get_bool(Constants.is_loading_comment);
    if (isLoaded) return;

    // 设置标志位，避免重复初始化
    Storage().set_bool(Constants.is_loading_comment, true);

    // 获取评论ID列表
    final commentIds = comment_data.values
        .map((comment) => comment.comment_id)
        .toList();
    Storage().set_list(Constants.comment_list, commentIds);

    // 存储所有默认评论数据
    for (var comment in comment_data.values) {
      Storage().set_json('comment_${comment.comment_id}', comment.toJson());
    }
  }

  /// 初始化帖子数据
  static Future<void> _init_post_data() async {
    final isLoaded = Storage().get_bool(Constants.is_loading_post);
    if (isLoaded) return;

    // 设置标志位，避免重复初始化
    Storage().set_bool(Constants.is_loading_post, true);

    // 获取帖子ID列表
    final postIds = Storage().get_list(Constants.post_list_key);

    // 存储所有默认帖子数据
    for (var post in post_list) {
      if (!postIds.contains(post.post_id)) {
        postIds.add(post.post_id);
        Storage().set_string(
          'post_${post.post_id}',
          json.encode(post.toJson()),
        );
      }
    }

    // 更新帖子ID列表
    Storage().set_list(Constants.post_list_key, postIds);
  }
}
